import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import RandomForestClassifier
original_data = pd.read_csv('iris.csv')
original_data.head()
set(original_data.Species)
data = original_data.replace({ 'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2})
data
X = data.iloc[:, 1:-1]
y = data.Species
lda = LinearDiscriminantAnalysis()
lda_transformed_data = lda.fit_transform(X, y)
lda_transformed_data.shape
_ = plt.scatter(lda_transformed_data[:, 0], lda_transformed_data[:, 1], c=y)
tree = DecisionTreeClassifier(min_samples_split=10, max_depth=None)
tree.fit(lda_transformed_data, y)
tree.score(lda_transformed_data, y)
def draw_contour(clf, X):
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
plot_step = 100
xx, yy = np.meshgrid(np.linspace(x_min, x_max, plot_step),
np.linspace(y_min, y_max, plot_step))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# print(Z)
Z = Z.reshape(xx.shape)
cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu, alpha=0.3)
draw_contour(tree, lda_transformed_data)
_ = plt.scatter(lda_transformed_data[:, 0], lda_transformed_data[:, 1], c=y)
reduced_X = X.loc[:, ['SepalLengthCm', 'PetalLengthCm']]
tree_2 = DecisionTreeClassifier(min_samples_split=2, max_depth=None)
tree_2.fit(reduced_X, y)
tree_2.score(reduced_X, y)
draw_contour(tree_2, reduced_X.values)
_ = plt.scatter(reduced_X.values[:, 0], reduced_X.values[:, 1], c=y)
bc_tree = DecisionTreeClassifier(min_samples_split=5, max_depth=3)
bc = BaggingClassifier(bc_tree, n_estimators=100, max_samples=0.4)
bc.fit(reduced_X, y)
bc.score(reduced_X, y)
draw_contour(bc, reduced_X.values)
_ = plt.scatter(reduced_X.values[:, 0], reduced_X.values[:, 1], c=y)
knn = KNeighborsClassifier(n_neighbors=10)
knn.fit(lda_transformed_data, y)
knn.score(lda_transformed_data, y)
draw_contour(knn, lda_transformed_data)
_ = plt.scatter(lda_transformed_data[:, 0], lda_transformed_data[:, 1], c=y)
ab_tree = DecisionTreeClassifier(min_samples_split=5, max_depth=2)
ab = AdaBoostClassifier(ab_tree, n_estimators=50)
ab.fit(reduced_X, y)
ab.score(reduced_X, y)
draw_contour(ab, reduced_X.values)
_ = plt.scatter(reduced_X.values[:, 0], reduced_X.values[:, 1], c=y)
rf = RandomForestClassifier(n_estimators=100, min_samples_split=10, max_depth=None)
rf.fit(reduced_X, y)
rf.score(reduced_X, y)
draw_contour(rf, reduced_X.values)
_ = plt.scatter(reduced_X.values[:, 0], reduced_X.values[:, 1], c=y)
ab_tree_2 = DecisionTreeClassifier(min_samples_split=5, max_depth=3)
ab_2 = AdaBoostClassifier(ab_tree_2, n_estimators=50)
bc_2 = BaggingClassifier(ab_2, n_estimators=100, max_samples=0.4)
bc_2.fit(reduced_X, y)
bc_2.score(reduced_X, y)
draw_contour(bc_2, reduced_X.values)
_ = plt.scatter(reduced_X.values[:, 0], reduced_X.values[:, 1], c=y)
ab_tree_2 = DecisionTreeClassifier(min_samples_split=5, max_depth=3, class_weight={0: 20, 1: 1, 2: 1})
ab_2 = AdaBoostClassifier(ab_tree_2, n_estimators=50)
bc_2 = BaggingClassifier(ab_2, n_estimators=50, max_samples=0.4)
bc_2.fit(reduced_X, y)
bc_2.score(reduced_X, y)
draw_contour(bc_2, reduced_X.values)
_ = plt.scatter(reduced_X.values[:, 0], reduced_X.values[:, 1], c=y)